package com.witherest.server.common.bean;

import java.util.Properties;

import org.springframework.core.io.Resource;

/**
 * 어플리케이션에서 Config 정보를 관리 및 생성하는 클래스
 */
public class ConfigBuildFactoryBean {

	/** config 파일들의 위치 정보. */
	private Resource[] locations;
	
	/** config 파일에 있는 모든 정보는 저장하는 오브젝트. */
	private Properties config = new Properties();

	/**
	 * 빈이 초기화 될때 실행 된다. config.properties, system properties 값들을 하나의 properties로 만든다.
	 * 
	 * @throws Exception the exception
	 */
	public void init() throws Exception {
		if (locations != null) {
			Props props = new Props();
			for (Resource resource : locations) {
				props.load(resource.getInputStream());
			}
			props.fromProperties(System.getProperties());
			props.expandVariables();
			config = props.toProperties();
		}
	}

	/**
	 * Config 정보를 저장할 Properties 객체를 생성 한다.
	 * 
	 * @return the properties
	 * @throws Exception the exception
	 */
	public Properties createInstance() throws Exception {
		return config;
	}

	public Class<Properties> getObjectType() {
		return Properties.class;
	}

	/**
	 * config 파일 위치 정보를 변경 한다.
	 * 
	 * @param locations the new locations
	 */
	public void setLocations(Resource[] locations) {
		this.locations = locations;
	}

}
